using System.Text.RegularExpressions;

namespace CSSharpPro._1016;

public class Demo1
{
    //1.三个数排序
    public void TestPrint()
    {
        Console.WriteLine("请输入三个整数：");

        // 读取三个整数
        Console.Write("请输入第一个整数 x: ");
        int x = Convert.ToInt32(Console.ReadLine());

        Console.Write("请输入第二个整数 y: ");
        int y = Convert.ToInt32(Console.ReadLine());

        Console.Write("请输入第三个整数 z: ");
        int z = Convert.ToInt32(Console.ReadLine());

        // 手动排序
        int temp;
        if (x > y)
        {
            temp = x;
            x = y;
            y = temp;
        }

        if (x > z)
        {
            temp = x;
            x = z;
            z = temp;
        }

        if (y > z)
        {
            temp = y;
            y = z;
            z = temp;
        }

        // 输出结果
        Console.WriteLine($"从小到大排序的结果：{x} {y} {z}");
    }
    //打印出1-100之间所有不是7的倍数和不包含7的数字， 并求和。
    public void TestPrint2()
    {

        int sum = 0;
        List<int> validNumbers = new List<int>();

        // 遍历1到100之间的所有数字
        for (int i = 1; i <= 100; i++)
        {
            // 检查是否是7的倍数
            bool isMultipleOf7 = i % 7 == 0;

            // 检查数字中是否包含7
            bool contains7 = i.ToString().Contains("7");

            // 如果既不是7的倍数也不包含7，则记录并累加
            if (!isMultipleOf7 && !contains7)
            {
                validNumbers.Add(i);
                sum += i;
            }
        }

        // 打印符合条件的数字
        Console.WriteLine("1-100之间所有不是7的倍数且不包含7的数字：");
        Console.WriteLine(string.Join(", ", validNumbers));

        // 打印总和
        Console.WriteLine($"\n这些数字的总和是：{sum}");
    }
    //打印九九乘法表
    public void TestPrint3()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                Console.Write($"{j}*{i}={i * j}\t");
            }
            Console.WriteLine();
        }
    }
    //完数问题
    public void TestPrint4()
    {
        Console.WriteLine("1000以内的完数有：");
        
        // 遍历1到1000的所有数
        for (int i = 1; i <= 1000; i++)
        {
            int factorSum = 0;
            
            // 计算所有真因子的和
            for (int j = 1; j < i; j++)
            {
                if (i % j == 0)
                {
                    factorSum += j;
                }
            }
            
            // 判断是否为完数，如果是则直接打印
            if (factorSum == i)
            {
                Console.Write(i + " ");
            }
        }
        
        Console.ReadKey();
    }
    //键盘录入一个正整数，请求：1.它是几位数？2.逆序打印出各位数字。
    public void TestPrint5()
    {
        Console.WriteLine("请输入一个正整数：");
        string input = Console.ReadLine();
        
        // 验证输入是否为有效的正整数
        if (int.TryParse(input, out int number) && number > 0)
        {
            // 1. 判断数字的位数
            int digitCount = input.Length;
            Console.WriteLine($"这是一个{digitCount}位数");
            
            // 2. 逆序打印各位数字
            Console.Write("逆序打印各位数字：");
            for (int i = input.Length - 1; i >= 0; i--)
            {
                Console.Write(input[i] + " ");
            }
        }
        else
        {
            Console.WriteLine("输入无效，请输入一个有效的正整数！");
        }
        
        Console.ReadKey();
    }
//打印菱形，根据输入的行数，显示菱形形状
    public void TestPrint6()
    {
        int row = Convert.ToInt32(Console.ReadLine());
        if (row % 2 == 0)
        {
            Console.Write("请输入正确行数");
            return;
        }

        for (int i = 1; i <= row / 2 + 1; i++)
        {
            // 打印空格
            for (int j = 1; j <= row / 2 - i + 1; j++)
            {
                Console.Write(" ");
            }

            // 打印星号
            for (int k = 1; k <= 2 * i - 1; k++)
            {
                Console.Write("*");
            }

            Console.WriteLine();
        }

        // 打印下半部分
        for (int i = row / 2; i >= 1; i--)
        {
            // 打印空格
            for (int j = 1; j <= row / 2 - i + 1; j++)
            {
                Console.Write(" ");
            }

            // 打印星号
            for (int k = 1; k <= 2 * i - 1; k++)
            {
                Console.Write("*");
            }

            Console.WriteLine();
        }
    }
//6.用户注册、登录、交互
    public void TestPrint7()
    {
        // 用于存储用户信息的字典，用户名作为键，密码作为值
            Dictionary<string, string> userCredentials = new Dictionary<string, string>();
            bool isRunning = true;
            
            while (isRunning)
            {
                // 显示主菜单
                Console.WriteLine("主菜单：");
                Console.WriteLine("1. 登录");
                Console.WriteLine("2. 注册");
                Console.WriteLine("3. 退出");
                Console.Write("请选择功能（输入数字）：");
                string choice = Console.ReadLine();
                
                switch (choice)
                {
                    case "1":
                        // 用户登录功能
                        Console.Write("请输入用户名：");
                        string loginUsername = Console.ReadLine();
                        Console.Write("请输入密码：");
                        string loginPassword = Console.ReadLine();
                        
                        if (userCredentials.TryGetValue(loginUsername, out string storedPassword) && storedPassword == loginPassword)
                        {
                            Console.WriteLine("登录成功！");
                            Console.WriteLine("进入系统首页（模拟）");
                        }
                        else if (!userCredentials.ContainsKey(loginUsername))
                        {
                            Console.WriteLine("用户名不存在！");
                        }
                        else
                        {
                            Console.WriteLine("密码错误！");
                        }
                        break;
                        
                    case "2":
                        // 用户注册功能
                        Console.Write("请输入用户名：");
                        string regUsername = Console.ReadLine();
                        
                        if (userCredentials.ContainsKey(regUsername))
                        {
                            Console.WriteLine("用户名已存在，请重新注册！");
                            break;
                        }
                        
                        Console.Write("请输入密码：");
                        string regPassword = Console.ReadLine();
                        Console.Write("请确认密码：");
                        string confirmPassword = Console.ReadLine();
                        
                        if (regPassword != confirmPassword)
                        {
                            Console.WriteLine("两次输入的密码不一致，请重新注册！");
                            break;
                        }
                        
                        userCredentials.Add(regUsername, regPassword);
                        Console.WriteLine("注册成功！");
                        break;
                        
                    case "3":
                        isRunning = false;
                        Console.WriteLine("程序已退出。");
                        break;
                        
                    default:
                        Console.WriteLine("输入错误，请重新输入！");
                        break;
                }
            }
    }
  //数据验证规则
    public void TestPrint8()
    {
        // 用户名验证
        Console.WriteLine("请输入用户名：");
        string username = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(username))
        {
            Console.WriteLine("用户名不可为空");
            return;
        }
        if (username.Length < 3 || username.Length > 15)
        {
            Console.WriteLine("用户名长度必须为 3-15 个字符");
            return;
        }
        if (!Regex.IsMatch(username, @"^[a-zA-Z0-9_]+$"))
        {
            Console.WriteLine("用户名只能包含字母、数字、下划线");
            return;
        }

        // 密码验证
        Console.WriteLine("请输入密码：");
        string password = Console.ReadLine();
        if (string.IsNullOrWhiteSpace(password))
        {
            Console.WriteLine("密码不可为空");
            return;
        }
        if (password.Length < 6 || password.Length > 20)
        {
            Console.WriteLine("密码长度必须为 6-20 个字符");
            return;
        }
        if (!Regex.IsMatch(password, "[A-Z]") || !Regex.IsMatch(password, "[a-z]") || !Regex.IsMatch(password, "[0-9]"))
        {
            Console.WriteLine("密码必须包含至少 1 个大写字母、1 个小写字母和 1 个数字");
            return;
        }

        // 确认密码验证
        Console.WriteLine("请确认密码：");
        string confirmPassword = Console.ReadLine();
        if (password != confirmPassword)
        {
            Console.WriteLine("密码与确认密码不一致");
            return;
        }

        // 菜单选择非数字输入处理（示例）
        Console.WriteLine("请输入菜单选项（数字）：");
        string menuInput = Console.ReadLine();
        if (!int.TryParse(menuInput, out _))
        {
            Console.WriteLine("请输入有效数字");
            return;
        }

        Console.WriteLine("所有验证通过！");
    }
}

    

